/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import model.bean.*;
import model.daobase.DBase;

/**
 *
 * @author alulab
 */
public class DaoArchivo extends DBase {
    
    
    
    
    //listar
    
    public ArrayList<BeanArchivo> Archivolist() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.like,a.num_descargas,cu.nombre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "ORDER BY cu.nombre_curso";
     
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado= new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);
                
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }

    
    public ArrayList<BeanArchivo> Archivolistnoreportados() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.like,a.num_descargas,cu.nommbre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo,u.nombre,u.apellido "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado "
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "INNER JOIN usuario u ON u.idusuario=a.idusuario "
                    + "where a.idestado=1 "
                    + "ORDER BY cu.nombre_curso";
     
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado= new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo=new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(11));
                archivo.setTipoarchivo(tipoarchivo);
                BeanUsuario usuario=new BeanUsuario();
                usuario.setNombre(res.getString(12));
                usuario.setApellido(res.getString(13));
                archivo.setUsuario(usuario);
                
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }
     public ArrayList<BeanArchivo> Archivolistreportados() {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        ArrayList<BeanArchivo> lista_archivos = new ArrayList<BeanArchivo>();


        try {

            String query = "SELECT a.idarchivo,a.semestre,a.nota,a.like,a.num_descargas,cu.nommbre_curso,a.ruta,a.descripcion,a.fecha_subida,a.tamaño,e.nombre_estado,ta.nombre_tipo "
                    + "FROM archivo a "
                    + "INNER JOIN curso cu ON cu.idcurso = a.idcurso "
                    + "INNER JOIN estado e ON e.idestado = a.idestado"
                    + "INNER JOIN tipoarchivo ta ON ta.idtipoarchivo=a.idtipoarchivo "
                    + "where a.idestado=0";
     
            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();
            
            BeanArchivo archivo;
            while (res.next()) {
                archivo = new BeanArchivo();
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                archivo.setLike(res.getInt(4));
                archivo.setNum_descargas(res.getInt(5));
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(5));
                archivo.setCurso(curso);
                archivo.setRuta(res.getString(6));
                archivo.setDescripcion(res.getString(7));
                archivo.setFecha_subida(res.getDate(8));
                archivo.setTamaño(res.getDouble(9));
                BeanEstado estado= new BeanEstado();
                estado.setNombre_estado(res.getString(10));
                archivo.setEstado(estado);
                BeanTipoArchivo tipoarchivo=new BeanTipoArchivo();
                tipoarchivo.setNombre_tipo(res.getString(11));
                archivo.setTipoarchivo(tipoarchivo);
                lista_archivos.add(archivo);
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return lista_archivos;

    }
    
    //borrar
    
    
    public void borrar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=-1"
                    + "where idarchivo="+idarchivo; 
                   
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
    //insertar
    
     public void insert(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "INSERT into archivo(semestre,nota,idusuario,idcurso,ruta,descripcion,fecha_subida,tamaño,idestado,idtipoarchivo) "
                    + "values('" + archivo.getSemestre() + "','" + archivo.getNota() + "','" + archivo.getUsuario().getIdusuario()
                    + "','" + archivo.getCurso().getIdcurso() + "','" + archivo.getRuta()
                    + "','" + archivo.getDescripcion() + "',now(),'" + archivo.getTamaño() + "','" + archivo.getEstado().getIdestado() + "',"+archivo.getTipoarchivo().getIdtipoarchivo()+ ")";
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
    
    
    
    
    //bloquear
     
     public void reportar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=0"
                    + "where idarchivo="+idarchivo; 
                   
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
   
       public void desreportar(int idarchivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {

            String query = "UPDATE archivo SET idestado=1"
                    + "where idarchivo="+idarchivo; 
                   
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
       
       
        public BeanArchivo get(int id) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;
        BeanArchivo archivo = new BeanArchivo();

        try {

            String query = "SELECT a.idarchivo,a.semestre, a.nota,c.nombre_curso,a.ruta,a.descripcion,a.idestado, ta.nombre_tipo "
                    + "FROM archivo a"
                    + "inner join curso cu on a.idcurso=cu.idcurso "
                    + "inner join tipoarchivo ta on ta.idtipoarchivo=a.idtipoarchivo "
                    + "WHERE idarchivo=" + id;

            pstmt = conn.prepareStatement(query);
            res = pstmt.executeQuery();

            while (res.next()) {
                archivo.setIdarchivo(res.getInt(1));
                archivo.setSemestre(res.getString(2));
                archivo.setNota(res.getInt(3));
                
                BeanCurso curso= new BeanCurso();
                curso.setNombre_curso(res.getString(4));
                archivo.setCurso(curso);
                
                archivo.setRuta(res.getString(5));
                archivo.setDescripcion(res.getString(6));
                
                BeanEstado estado = new BeanEstado();
                estado.setIdestado(res.getInt(7));
                archivo.setEstado(estado);
                
                
             
            }

            res.close();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

        return archivo;

    }

    public void update(BeanArchivo archivo) {

        this.init_mysql();
        PreparedStatement pstmt = null;
        ResultSet res = null;

        try {
            
            String query = "UPDATE archivo SET semestre='" + archivo.getSemestre() + "', nota=" + archivo.getNota() + ", idcurso=" + archivo.getCurso().getIdcurso()
                    + ", ruta='" + archivo.getRuta() + "', descripcion='" + archivo.getDescripcion()
                    + "', idestado=" + archivo.getEstado().getIdestado()
                    +", idtipoarchivo="+archivo.getTipoarchivo().getIdtipoarchivo()
                    + " WHERE idarchivo=" + archivo.getIdarchivo();
            pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
            pstmt.close();
            conn.close();

        } catch (SQLException e1) {
            e1.getMessage();
        }

    }
     
}
